package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import model.UnidadeFederativa;
import model.Registro;

public class RegistroJDBCCadastro implements RegistroCadastroDAO {

	Connection conexao;

	public RegistroJDBCCadastro(Connection conexao) {
		this.conexao = conexao;
	}

	public String salvar(Registro registro) {
		/**
		 * String sqlquery =
		 * "insert into REGISTRO(NMEMPRESA, NMRAZAO, NUCNPJ, NUINSCEST, ENDERECO, DSBAIRRO, NUCEP, DSCIDADE, DSESTADO, NUFONE, "
		 * +
		 * "NMRESPONSAVEL, DTCADASTRO, SERIAL, NMIMPRESSORA, BOLIMPCHEQUE, BOLDISPLAY, BOLGAVETA, BOLGAVETAVEND, DSPORTACOM, NUSERIEIMP, "
		 * +
		 * "DSCONFIGIMPVENDAPROD, BOLCONFIGIMPUSAIMPCHEQUE, BOLCONFIGIMPRESTAURANTE, BOLCONFIGIMPGAVETA, DSCONFIGIMPENCERRAVENDA, DSCONFIGIMPMENSAGEM, CDBARRA, CDBARRAPROD, BOLIMPNFVEND, BOLIMPNFCOMP, "
		 * +
		 * "BOLIMPCOMPVEND, BOLIMPCOMPCOMP, BOLIMPCOMPDEV, BOLIMPNFDEV, VLDESCONTO, PRIPI, PRFRETE,PRICMSDEBITO, PRICMSCREDITO, PRTXFINANCI1, "
		 * +
		 * "VLCUSTOLIQUIDO, PRCUSTOFIXO, PRCOMISSAO, PRLUCRO, PRSIMPLES, PRPIS, PRCOFINS, PRCONTSLL, PRIMPRENDA, PRCPMF, "
		 * +
		 * "PRIMPESTICMS, PRTXFINANC2, PROUTROS, PRMARKUPDIV, IDCONVENIOSINTEGRA, IDOPERACAOSINTEGRA, BOLINFORMAQUANTIDADE, NUENDERECO, NUCOMPLEMENTO, IDIFINALIDSINTEGRA, "
		 * +
		 * "DTINCLUSAO, HRINCLUSAO, DTALTERACAO, HRALTERACAO, BOLMFD, PERCACRESDUPLPAG, PERCACRESDUPLREC, PERCDESCDUPLPAG, PERCDESCDUPLREC, BOLATUESTOQUEORCAMENTO, "
		 * +
		 * "BOLUSATEF, CDFATURAVENDA, CDFATURADEVOLUCAO, BOLREJEITADIGITOCODBARRAS, BOLGERARREFERENCIA, BOLPADRAOEAN, NUDIASTOLERANCIADUPLREC, CDFORMAPAGTODINHEIRO, CDFORMAPAGTOPARCELADO, CDFORMAPAGTOCARTAO,"
		 * +
		 * "CDFORMAPAGTOCHEQUE, NUINSCMUNICIPAL, CDTAMANHO, CDMATERIAL, CDTPSEXO, CDFXETARIA, CDFORMAPECA, CDCATEGORIA, CDUNIDADE, CDALIQUOTA, "
		 * +
		 * "CDMARCA, CDCLASSE, CDTPPRODUTO, CDCLIENTE, CDFORMAPAGTO, NUDIASTOLERANCIASEMJUROS, DSMSGVENDA, DSMSGDEVOLUCAO, DSMSGFECHAPERIODO, BOLESTOQUEALMOX, "
		 * +
		 * "BOLATUALIZAPRECOCOMPRA, CDDUPLICATAABERTOPAG, CDDUPLICATAQUITADOPAG, CDDUPLICATAABERTOREC, CDDUPLICATAQUITADOREC, BOLUSATEF_DIAL, BOLUSATEF_DISC, PERCMINIMOVENDAS, NUMAXIMODEVOLUCAO, BOLDIVIDEINTEGRALDUPLICATA, "
		 * +
		 * "BOLIMPRROCAMENTO2VIAS, BOLQUITAUTODUPLPAGAR, BOLQUITAUTOPAGAMENTO, BOLQUITAUTODUPLRECEBER, BOLQUITAUTORECEBIMENTO, DSEMAIL, VLMAXIMODESC, CDFORMAPAGTOTICKET, CDFORMAPAGTOVALES, CDFORMAPAGTOASSINADOS, "
		 * +
		 * "BOLFARMACIAPOPULAR, BOLCLICPFMSG, BOLCLIENDERECOMSG, BOLCLIBAIRROMSG, BOLCLICEPMSG, BOLCLICIDADEMSG, BOLCLIESTADOMSG, NULAUDO, NUCPNPJDESENVOLVEDORA, NUINSCESTDESENVOLVEDORA, "
		 * +
		 * "NUINSCMUNICDESENVOLVEDORA, NMRAZAODESENVOLVEDORA, DSENDERECODESENVOLVEDORA, DSNUMERODESENVOLVEDORA, DSCOMPLEMENTODESENVOLVEDORA, NMBAIRRODESENVOLVEDORA, NMCIDADEDESENVOLVEDORA, NUCEPDEDESENVOLVEDORA, DSUFDEDESENVOLVEDORA, NUFONEDESENVOLVEDORA, "
		 * +
		 * "NMRESPONSAVELDESENVOLVEDORA, NMAPLICACAO, NMVERSAO, NMPRINCIPALARQUIVO, DSCODIGOAUTENTICACAO, DSVERSAOERPAFECF, NUVIASRECIBO, DSMSGVENDA1, NMCONTABILISTA, NUCPFCONTABILISTA, "
		 * +
		 * "NUCRCCONTABILISTA, NUCNPJCONTABILISTA, NUCEPCONTABILISTA, ENDERECOCONTABILISTA, DSCOMPLCONTABILISTA, DSBAIRROCONTABILISTA, NUFONECONTABILISTA, NUFAXCONTABILISTA, EMAILCONTABILISTA, CODMUNCONTABILISTA, "
		 * +
		 * "SUFRAMAEMPRESA, CODMUNEMPRESA, EMAILEMPRESA, DSUFCONTABILISTA, NUFAXEMPRESA, NUENDERECOCONTABILISTA, BOLSTANDALONE, BOLMOVTOPRODUTOPROMOCAO, BOLVENDACLIATRASO, BOLDAVIMPRESSOECF, "
		 * +
		 * "BOLDAVIIMPRESSOECF, BOLUSADAV, BOLUSAPREVENDA, BOLVERIFICATROCA, PERCDEVOLUCAOTROCA, BOLLISTITENTROCADEV, CDFUNCIONARIO, MD5, MD5ARQCONFIG, NUDIASMAXDEV, "
		 * +
		 * "BOLDAVOS, QTDDIGBALANCA, BOLBALANCA, BOLEXPORTAVENDA, BOLEXPORTAVENDALOG, BOLBLOQUEIASERCON, MD5NFE, CNAE, BOLLIMITETROCA, NUDIASTOLERADEVOLUCAO, "
		 * + "PERCDEVOLUCAOCONSIGNADA, PERCVENDACONSIGNADA, DSMSGVENDADIRETA)" +
		 * " values(?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?," +
		 * "?,?,?,?,?,?,?,?,?,?," + "?,?,?)";
		 **/

		String sqlquery = "insert into REGISTRO(NMEMPRESA, NMRAZAO, NUCNPJ, NUINSCEST, ENDERECO, DSBAIRRO, NUCEP, DSCIDADE, DSESTADO, NUFONE, "
				+ "NMRESPONSAVEL, DTCADASTRO, NUENDERECO, NUCOMPLEMENTO, DTINCLUSAO, DTALTERACAO,  DSMSGVENDA, DSMSGDEVOLUCAO, DSEMAIL)"
				+ " values(?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?)";

		PreparedStatement pstmt;
		try {

			pstmt = this.conexao.prepareStatement(sqlquery);
			pstmt.setString(1, registro.getNmempresa());
			pstmt.setString(2, registro.getNmrazao());
			pstmt.setString(3, registro.getNucnpj());
			pstmt.setString(4, registro.getNuinscest());
			pstmt.setString(5, registro.getEndereco());
			pstmt.setString(6, registro.getDsbairro());
			pstmt.setString(7, registro.getNucep());
			pstmt.setString(8, registro.getDscidade());
			pstmt.setString(9, registro.getDsestado());
			pstmt.setString(10, registro.getNufone());
			pstmt.setString(11, registro.getNmresponsavel());
			pstmt.setString(12, registro.getDtcadastro());
			pstmt.setString(13, registro.getNuendereco());
			pstmt.setString(14, registro.getNucomplemento());
			pstmt.setString(15, registro.getDtinclusao());
			pstmt.setString(16, registro.getDtalteracao());
			pstmt.setString(17, registro.getDsmsgvenda());
			pstmt.setString(18, registro.getDsmsgdevolucao());
			pstmt.setString(19, registro.getDsemail());

			// pstmt.setDate(8, new java.sql.Date(
			// bancos.getHrinclusaobanco().getTime()));
			// pstmt.setDate(10, new java.sql.Date(
			// bancos.getHralteracaobanco().getTime()));

			// System.out.println("BANCOS comando sql:"+sqlquery);
			pstmt.execute();

			return ("success");

		} catch (Exception e) {

			e.printStackTrace();
			return ("error");
		}
	}

	public List<String> ListarRegistro(String nmempresa) {

		List<String> result = new ArrayList<String>();
		if (!nmempresa.trim().equals("")) {

			String sql = "SELECT NMRAZAO FROM REGISTRO WHERE (NMRAZAO like '%"
					+ nmempresa + "%') or (NMEMPRESA like '%" + nmempresa
					+ "%') ORDER BY NMRAZAO ASC;";
			String snmrazao = "";
			try {
				java.sql.Statement stmt = conexao.createStatement();
				ResultSet valueempresa = stmt.executeQuery(sql);

				valueempresa.first();
				while (!valueempresa.isAfterLast()) {
					snmrazao = valueempresa.getString("NMRAZAO");
					result.add(snmrazao);
					valueempresa.next();
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("VALOR EM BRANCO " + nmempresa
					+ " ------------- " + result);
		}
		return result;
	}

	public String LocalizaRegistro(String nmempresa) {

		String result = "";
		if (!nmempresa.trim().equals("")) {

			String sql = "SELECT CDREGISTRO FROM REGISTRO WHERE (NMRAZAO like '"
					+ nmempresa + "') ORDER BY CDREGISTRO ASC;";
			String scdregistro = "";
			try {
				java.sql.Statement stmt = conexao.createStatement();
				ResultSet valueempresa = stmt.executeQuery(sql);

				valueempresa.first();
				scdregistro = valueempresa.getString("CDREGISTRO");
				// result.add(scdregistro);
				result = (scdregistro);
				System.out.println("CODIGO  EMPRESA " + scdregistro
						+ " ------------- " + result);

			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("VALOR EM BRANCO " + nmempresa
					+ " ------------- " + result);
		}
		return result;
	}

	public ResultSet listarEmpresas() {
		String sql = "select NMEMPRESA, NMRAZAO, NUCNPJ, NUINSCEST, ENDERECO, DSBAIRRO, NUCEP, DSCIDADE, DSESTADO, NUFONE, "
				+ "NMRESPONSAVEL, DTCADASTRO, NUENDERECO, NUCOMPLEMENTO, DTINCLUSAO, DTALTERACAO,  DSMSGVENDA, DSMSGDEVOLUCAO, DSEMAIL "
				+ "from REGISTRO;";

		ResultSet value = null;
		try {
			java.sql.Statement stmt = conexao.createStatement();
			value = stmt.executeQuery(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return value;
	}

	public void editar(Registro registro) {
	}

	public void excluir(Registro registro) {
	}

	public List<Registro> ListarRegistroT() {

		List<Registro> registrosLista = new ArrayList<Registro>();
		String sql = "select CDREGISTRO, NMEMPRESA, NMRAZAO, NUCNPJ, NUINSCEST, ENDERECO, DSBAIRRO, NUCEP, DSCIDADE, DSESTADO, NUFONE, "
				+ "NMRESPONSAVEL, DATE_FORMAT(DTCADASTRO, '%d/%m/%Y') AS DTCADASTRO, NUENDERECO, NUCOMPLEMENTO, "
				+ "DATE_FORMAT(DTINCLUSAO, '%d/%m/%Y') AS DTINCLUSAO, DATE_FORMAT(DTALTERACAO, '%d/%m/%Y') AS DTALTERACAO,  "
				+ "DSMSGVENDA, DSMSGDEVOLUCAO, DSEMAIL from db_plcsistemas.REGISTRO;";

		ResultSet value = null;
		try {
			java.sql.Statement stmt = conexao.createStatement();
			value = stmt.executeQuery(sql);
			while (value.next()) {
				Registro registro = new Registro();
				registro.setCdregistro(value.getString("CDREGISTRO"));
				registro.setNmempresa(value.getString("NMEMPRESA"));
				registro.setNmrazao(value.getString("NMRAZAO"));
				registro.setNucnpj(value.getString("NUCNPJ"));
				registro.setNuinscest(value.getString("NUINSCEST"));
				registro.setEndereco(value.getString("ENDERECO"));
				registro.setDsbairro(value.getString("DSBAIRRO"));
				registro.setNucep(value.getString("NUCEP"));
				registro.setDscidade(value.getString("DSCIDADE"));
				registro.setDsestado(value.getString("DSESTADO"));
				registro.setNufone(value.getString("NUFONE"));
				registro.setNmresponsavel("NMRESPONSAVEL");
				registro.setDtcadastro(value.getString("DTCADASTRO"));
				registro.setNuendereco(value.getString("NUENDERECO"));
				registro.setNucomplemento(value.getString("NUCOMPLEMENTO"));
				registro.setDtinclusao(value.getString("DTINCLUSAO"));
				registro.setDtalteracao(value.getString("DTALTERACAO"));
				registro.setDsmsgvenda(value.getString("DSMSGVENDA"));
				registro.setDsmsgdevolucao(value.getString("DSMSGDEVOLUCAO"));
				registro.setDsemail(value.getString("DSEMAIL"));

				registrosLista.add(registro);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return registrosLista;
	}

	public List<UnidadeFederativa> ListarUF() {

		List<UnidadeFederativa> listuf = new ArrayList<UnidadeFederativa>();

		if (listuf.equals(null)) {
			EntityManagerFactory emf;
			EntityManager em;
			emf = Persistence.createEntityManagerFactory("manager1");
			em = emf.createEntityManager();
			Query query = em
					.createQuery("Select CDUF, NMUF, SGUF from UF order by NMUF");
			// String sqlquery =
			// "Select CDUF, NMUF, SGUF from UF order by NMUF";
			listuf = query.getResultList();
			em.close();
		}
		return listuf;
	}

}
